package com.gosophia.metadataEngine.service;


import java.util.List;

import com.gosophia.commons.OrderCondition;
import com.gosophia.commons.Page;
import com.gosophia.commons.exception.BusinessException;
import com.gosophia.metadataEngine.entity.MetaDataTable;

/***
 * 元数据表api
 * @author mayue
 *
 */
public interface MetaDataTableService {
    /****
     * 添加元数据表信息:
     * metaDataTable,tableName,tableNameCN,entityClassName不能为null，metaDataTableId必须为null,
     * dataSourceInfo不能为null
     * @param metaDataTable 元数据表实体
     * @throw BusinessException JC2_YSJ_B_9:表名/表中文名/实体类名有重复
     */
	public void addMetaDataTable(MetaDataTable metaDataTable) throws BusinessException;
	/**
	 * 修改元数据表信息:
	 * metaDataTable,tableName,tableNameCN,entityClassName不能为null
	 * @param metaDataTable
	 * @throws BusinessException   JC2_YSJ_B_11:表名/表中文名/实体类名有重复
	 * @throws ConcurrencyException  JC2_YSJ_C_11:该数据表记录已被删除    JC2_YSJ_C_12:该数据表记录已被修改
	 */
	public void updateMetaDataTable(MetaDataTable metaDataTable) throws BusinessException;
    /**
     * 删除元数据表信息:
     * metaDataTableId,version 不能为null
     * @param metaDataTableId
     * @param version
     * @return 删除的元数据表
     * @throws BusinessException：当表有引用时   JC2_YSJ_B_10:该元数据表记录被引用，不能删除
     * @throws ConcurrencyException JC2_YSJ_C_9:该元数据表记录已被删除  JC2_YSJ_C_10:该元数据表记录已被修改
     */
	public MetaDataTable removeMetaDataTable(Long metaDataTableId,Long version) throws BusinessException;
    /**
     * 根据元数据表id查询:
     * metaDataTableId不能为null
     * @param metaDataTableId
     * @return  MetaDataTable
     */
	public MetaDataTable findMetaDataTableById(Long metaDataTableId);
	/**
	 * 分页查询所有元数据表中记录
	 * @param pageSize
	 * @param pageNo
	 * @return Page<MetaDataTable>
	 */
	public Page<MetaDataTable> findAllMetaDataTableByPage(int pageSize, int pageNo);
	/**
	 * 根据数据源信息实体Id查询该实体所关联的所有元数据实体
	 * @param dataSourceInfoId 不能为null
	 * @return 返回元数据实体列表
	 */
	public List<MetaDataTable> findMetaDataTablesByDataSourceInfoId(Long dataSourceInfoId);
	/**
     * 根据数据源实体ID分页查询所拥有的元数据表
     * @param dataSourceInfoId 数据源实体ID 不能为null
     * @param page page.pageSize>0 page.pageNo>0
     * @param searchString 模糊查询条件
     * @param orderConditions 排序条件
     * @return
     */
	public Page<MetaDataTable> findMetadataTablePageByDataSourceInfoId(
			Long dataSourceInfoId, Page<MetaDataTable> page,
			String searchString, List<OrderCondition> orderConditions);
}
